const arr = [1, 2, [3, 4, 5, [6, 7, 8, [9]]]]

// console.log(arr.flat(3));

// Infinity 无穷大
// console.log(arr.flat(Infinity));

// 递归
// function flatten(arr) {
//     let res = [];
//     for (let i = 0; i < arr.length; i++) {
//         if (Array.isArray(arr[i])) {
//             res = res.concat(flatten(arr[i]));
//         } else {
//             res.push(arr[i]);
//         }
//     }
//     return res;
// }
// console.log(flatten(arr));

// 缺陷：只能处理数组里都是数字的情况
// function flatten(arr) {
//     return arr.toString().split(',').map(item => {
//         return +item;
//     })
// }

// [1,2] [3,4,5] [6,7,8][9]
// reduce + 递归
// function flatten(arr) {
//     return arr.reduce((pre, cur) => {
//         return pre.concat(Array.isArray(cur) ? flatten(cur) : cur);
//     }, [])
// }

function flatten(arr) {
    while (arr.some(item => Array.isArray(item))) {
        arr = [].concat(...arr);
    }
    return arr;
}

console.log(flatten(arr));

